package com.asisto.model

import grails.test.*

class PersonaTests extends GrailsUnitTestCase {
    protected void setUp() {
        super.setUp()
    }

    protected void tearDown() {
        super.tearDown()
    }

    void testPadres() {

        Persona hijo = Persona.get(35)

        assertTrue hijo!= null
        println "hijo ${hijo.nombre}"

        def padres = hijo.padres

        padres.each {
            println "Padre: ${it.padre?.nombre}"
        }

        //Padre
        Persona padre = Persona.get(33)
        assertTrue padre!= null
        println "padre ${padre.nombre}"

        def hijos = padre.hijos

        hijos.each {
            println "hijos: ${it.hijo?.nombre}"
        }


        

    }

    void testCrearPadres() {

        Persona hijo = new Persona(nombre:'Hijo', apellidos:'Primero')

        def nuevoHijo = hijo.save()

        assertTrue nuevoHijo != null

        //Crea un padre
        Persona padre = new Persona(nombre:'Padre', apellidos:'Primero')
        Padre relacion = new Padre(padre:padre, hijo: nuevoHijo)

        padre.addToHijos(relacion)
        hijo.addToPadres(relacion)

        padre.save(flush:true)


        //Obtiene padres
        Persona elHijo = Persona.findByNombre('Hijo',[fetch:[padres:'eager']])
        assertTrue elHijo != null
        println "el hijo: ${elHijo.nombre}"

        //def padres = Padre.findAllByHijo(elHijo)
        def padres = elHijo.padres

        println 'Padres del hijo'.center(20,'-')
        padres.each {
            println "Padre: ${it.padre?.nombre}"
        }

        //Obtiene hijos
        Persona elPadre = Persona.findByNombre('Padre')
        assertTrue elPadre != null
        println "el padre: ${elPadre.nombre}"

        /*def hijos = Padre.findAllByPadre(elPadre)

        hijos.each {
            println "Hijo: ${it.hijo?.nombre}"
        }*/


        def hijosDirectos = elPadre.hijos

        hijosDirectos.each {
            println "Id padre: ${it.padre?.nombre}"
            println "Hijo: ${it.hijo?.nombre}"
        }


        
        


    }

}
